home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac SampleCode New for 1.6 / FogStyleSample / Source / Process.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  7.6 KB  |  352 lines  |  [TEXT/CWIE]

  1. /****************************/
  2. /*       PROCESS.C             */
  3. /* By Brian Greenstone      */
  4. /****************************/
  5.  
  6.  
  7. /****************************/
  8. /*    EXTERNALS             */
  9. /****************************/
  10. #include <QD3D.h>
  11. #include <QD3DGeometry.h>
  12. #include <QD3DGroup.h>
  13. #include <QD3DMath.h>
  14. #include <QD3DView.h>
  15. #include <QD3DGroup.h>
  16. #include <QD3DTransform.h>
  17. #include <QD3DStorage.h>
  18.  
  19. #include "myglobals.h"
  20. #include "misc.h"
  21. #include "process.h"
  22. #include "qd3d_support.h"
  23.  
  24. extern    float                gFramesPerSecond;
  25.  
  26.  
  27. /****************************/
  28. /*    PROTOTYPES            */
  29. /****************************/
  30.  
  31. static void InitModelWindow(void);
  32. static void BuildTestModel(void);
  33. static void CreateMyFogStyle(void);
  34.  
  35.  
  36. /****************************/
  37. /*    CONSTANTS             */
  38. /****************************/
  39.  
  40. #define    MODEL_WIND_ID            400
  41.  
  42. #define    MY_HITHER                 10
  43. #define MY_YON                    120
  44.  
  45. /*********************/
  46. /*    VARIABLES      */
  47. /*********************/
  48.  
  49. WindowPtr                gModelWindow = nil;
  50. QD3DSetupOutputType        gModelViewInfo;
  51. TQ3Object                gModelGroup = nil;
  52. TQ3GroupObject            gBaseGroup = nil;
  53.  
  54. TQ3AttributeSet        gTextureAttr;
  55.  
  56. TQ3Matrix4x4    gTransformMatrix;
  57. TQ3Object        gTransformObject = nil;
  58.  
  59. TQ3FogStyleData    gFogData;
  60. TQ3StyleObject    gFogStyleObject = nil;
  61.  
  62. TQ3ColorARGB    gClearColor = {1,1,1,1};
  63.  
  64.  
  65.  
  66. #pragma mark ========INITIALIZATION STUFF=========
  67.  
  68. /******************** INIT TEST ************************/
  69.  
  70. void InitTest(void)
  71. {
  72.  
  73.             /* INIT THE WINDOW */
  74.             
  75.     InitModelWindow();
  76.  
  77.  
  78.             /* CREATE THE TEST MODEL */
  79.             
  80.     BuildTestModel();
  81.  
  82.  
  83.             /* CREATE DISPLAY GROUP */
  84.             
  85.     gBaseGroup = Q3DisplayGroup_New();                                        // make display group     
  86.     Q3Matrix4x4_SetIdentity(&gTransformMatrix);
  87.     gTransformObject = Q3MatrixTransform_New(&gTransformMatrix);            // make transform object
  88.     
  89.     Q3Group_AddObject(gBaseGroup, gTransformObject);                        // add transform to group        
  90.  
  91.     Q3Group_AddObject(gBaseGroup, gFogStyleObject);    // add fog to it
  92.  
  93.     Q3Group_AddObject(gBaseGroup, gModelGroup);                                // add geometry to group 
  94.  
  95.  
  96.             /* DRAW THE WINDOW */
  97.                         
  98.     DrawModelWindow();
  99. }
  100.  
  101.  
  102.  
  103. /************** INIT MODEL WINDOW *******************/
  104.  
  105. static void InitModelWindow(void)
  106. {
  107. QD3DSetupInputType    viewDef;
  108. TQ3Point3D            cameraFrom = { 0,0, 100 };
  109. TQ3Point3D            cameraTo = { 0, 0, 0 };
  110. TQ3Vector3D            cameraUp = { 0.0, 1.0, 0 };
  111. TQ3ColorRGB            ambientColor = { 1.0, 1.0, 1.0 };
  112. TQ3ColorRGB            fillColor = { 0.0, 1.0, 1.0 };
  113. TQ3Vector3D            fillDirection1 = {1, -.3, -1 };
  114. TQ3Vector3D            fillDirection2 = { -1, -.1, -.2 };
  115.  
  116.  
  117.             /* CREATE THE WINDOW */
  118.             
  119.     gModelWindow = GetNewCWindow(MODEL_WIND_ID, nil,MOVE_TO_FRONT);
  120.     if (gModelWindow == nil)
  121.         DoFatalAlert("\pWhere did the GameWindow window go?");                    
  122.     SetPort((GrafPtr)gModelWindow);
  123.  
  124.  
  125.             /***********************/
  126.             /* SET QD3D PARAMETERS */
  127.             /***********************/
  128.  
  129.     viewDef.view.displayWindow         = gModelWindow;
  130.     viewDef.view.rendererType         = kQ3RendererTypeInteractive;
  131.     viewDef.view.clearColor         = gClearColor;
  132.     viewDef.view.paneClip.left         = 0;
  133.     viewDef.view.paneClip.right     = 0;
  134.     viewDef.view.paneClip.top         = 0;
  135.     viewDef.view.paneClip.bottom     = 0; 
  136.  
  137.     viewDef.styles.interpolation     = kQ3InterpolationStyleVertex; 
  138.     viewDef.styles.backfacing         = kQ3BackfacingStyleBoth;
  139.     viewDef.styles.fill                = kQ3FillStyleFilled; 
  140.     viewDef.styles.illuminationType    = kQ3IlluminationTypeLambert; 
  141.  
  142.     viewDef.camera.from             = cameraFrom;
  143.     viewDef.camera.to                 = cameraTo;
  144.     viewDef.camera.up                 = cameraUp;
  145.     viewDef.camera.hither             = MY_HITHER;
  146.     viewDef.camera.yon                 = MY_YON;
  147.     viewDef.camera.fov                 = 1.0;
  148.  
  149.     viewDef.lights.ambientBrightness = .1;
  150.     viewDef.lights.ambientColor     = ambientColor;
  151.     viewDef.lights.numFillLights     = 1;
  152.     viewDef.lights.fillDirection[0] = fillDirection1;
  153.     viewDef.lights.fillDirection[1] = fillDirection2;
  154.     viewDef.lights.fillColor[0]     = fillColor;
  155.     viewDef.lights.fillColor[1]     = fillColor;
  156.     viewDef.lights.fillBrightness[0] = 1.1;
  157.     viewDef.lights.fillBrightness[1] = 0.7;
  158.  
  159.     QD3D_SetupWindow(&viewDef, &gModelViewInfo);    
  160.     
  161.     
  162.             /* CREATE FOG STYLE OBJECT */
  163.             
  164.     CreateMyFogStyle();    
  165. }
  166.  
  167.  
  168. /******************* CREATE MY FOG STYLE OBJECT *****************/
  169.  
  170. static void CreateMyFogStyle(void)
  171. {
  172.  
  173.             /* SET MY PARAMETERS */
  174.  
  175.     gFogData.state         = kQ3On;                        // fog is on
  176.     gFogData.mode         = kQ3FogModeLinear;                // fog is linear
  177.     gFogData.fogStart     = 60;                            // start @ front
  178.     gFogData.fogEnd        = MY_YON;                        // end in back
  179.     gFogData.density     = 1.0;                            // goes totally foggy at back
  180.     gFogData.color        = gClearColor;                    // fog color is same as clear color
  181.  
  182.  
  183.             /* MAKE NEW OBJECT */
  184.             
  185.     gFogStyleObject = Q3FogStyle_New(&gFogData);
  186.     if (gFogStyleObject == nil)
  187.         DoFatalAlert("\pCreateMyFogStyle: Q3FogStyle_New failed!");
  188.  
  189. }
  190.  
  191.  
  192.  
  193. /********************* BUILD TEST MODEL **************************/
  194.  
  195. static void BuildTestModel(void)
  196. {
  197. TQ3TriMeshData                    myTriMeshData;
  198. TQ3TriMeshAttributeData            vertexAttribs[3],faceAttribs;
  199.  
  200. TQ3Point3D points[3] = 
  201. {
  202.     0,35,0,
  203.     -35,-35,0,
  204.     35,-35,0
  205. };
  206.  
  207. TQ3Vector3D    vertexNormals[3] = 
  208. {
  209.     0,0,1,
  210.     0,0,1,
  211.     0,0,1
  212. };
  213.  
  214. TQ3Vector3D    faceNormals[1] =
  215. {
  216.     0,0,1
  217. };
  218.  
  219. TQ3Param2D uvArray[3] =
  220. {
  221.     .5,1,
  222.     0,0,
  223.     1,0
  224. };
  225.  
  226.  
  227. TQ3TriMeshTriangleData    triangles[1] =
  228. {
  229.     0,1,2
  230. };
  231.         
  232.  
  233. TQ3SurfaceShaderObject    texture;
  234.  
  235.  
  236.             /* FIRST LOAD THE TEXTUREMAP */
  237.                     
  238.     texture = QD3D_GetTextureMap(128,nil);
  239.         
  240.     gTextureAttr = Q3AttributeSet_New();
  241.     Q3AttributeSet_Add(gTextureAttr, kQ3AttributeTypeSurfaceShader, &texture);        
  242.  
  243.             /* BUILD MAIN TRIMESH DATA STRUCTURE */
  244.  
  245.     myTriMeshData.triMeshAttributeSet = gTextureAttr;
  246.  
  247.     myTriMeshData.numTriangles = 1;
  248.     myTriMeshData.triangles = &triangles[0];
  249.  
  250.     myTriMeshData.numTriangleAttributeTypes = 1;
  251.     myTriMeshData.triangleAttributeTypes = &faceAttribs;
  252.  
  253.     myTriMeshData.numEdges = 0;
  254.     myTriMeshData.edges = nil;
  255.     myTriMeshData.numEdgeAttributeTypes = 0;
  256.     myTriMeshData.edgeAttributeTypes = nil;
  257.  
  258.     myTriMeshData.numPoints = 3;
  259.     myTriMeshData.points = &points[0];
  260.  
  261.     myTriMeshData.numVertexAttributeTypes = 1;
  262.      myTriMeshData.vertexAttributeTypes = &vertexAttribs[0];
  263.  
  264.  
  265.             /* CALCULATE BOUNDING BOX */
  266.  
  267.     Q3BoundingBox_SetFromPoints3D(&myTriMeshData.bBox, &points[0],    3, sizeof(TQ3Point3D));
  268.  
  269.  
  270.             /* CREATE FACE ATTRIBUTES */ 
  271.  
  272.     faceAttribs.attributeType = kQ3AttributeTypeNormal;
  273.     faceAttribs.data = &faceNormals[0];
  274.     faceAttribs.attributeUseArray = nil;
  275.  
  276.  
  277.             /* CREATE VERTEX ATTRIBUTES */ 
  278.  
  279.     vertexAttribs[0].attributeType = kQ3AttributeTypeSurfaceUV;
  280.     vertexAttribs[0].data = &uvArray[0];
  281.     vertexAttribs[0].attributeUseArray = nil;
  282.  
  283.  
  284.         /* MAKE THE TRIMESH GEOMETRY OBJECT */
  285.  
  286.     gModelGroup = Q3TriMesh_New(&myTriMeshData);
  287.     if (gModelGroup == nil)
  288.         DoFatalAlert("\pQ3TriMesh_New failed!");
  289.  
  290.  
  291. }
  292.  
  293.  
  294. #pragma mark =========UPDATING============
  295.  
  296.  
  297. /*************** DO MODEL WINDOW NULL EVENT **********************/
  298.  
  299. void DoModelWindowNullEvent(void)
  300. {
  301. TQ3Matrix4x4    m;
  302.  
  303.             /* ROTATE THE GEOMETRY */
  304.             
  305.     QD3D_CalcFramesPerSecond();
  306.     Q3Matrix4x4_SetRotate_XYZ(&m,0.4/gFramesPerSecond,0.5/gFramesPerSecond,0);
  307.     Q3Matrix4x4_Multiply(&m,&gTransformMatrix,&gTransformMatrix);    
  308.  
  309.  
  310.             /* UPDATE THE MATRIX */
  311.             
  312.     Q3MatrixTransform_Set(gTransformObject,&gTransformMatrix);
  313.  
  314.  
  315.             /* REDRAW IT */
  316.                 
  317.     DrawModelWindow();
  318. }
  319.  
  320.  
  321. /******************* DRAW MODEL WINDOW *********************/
  322. //
  323. // Calls the support function QD3D_DrawScene.
  324. // It passes the view info and a pointer to the game draw callback.
  325. //
  326.  
  327. void DrawModelWindow(void)
  328. {
  329.     QD3D_DrawScene(&gModelViewInfo,(void *)SubmitFogAndGeometry);
  330. }
  331.  
  332.  
  333. /*************** SUBMIT FOG AND GEOMETRY ******************/
  334.  
  335. void SubmitFogAndGeometry(QD3DSetupOutputType *viewInfo)
  336. {
  337. //    Q3Style_Submit(gFogStyleObject,viewInfo->viewObject);        // submit the fog style
  338. //    Q3FogStyle_Submit(&gFogData,viewInfo->viewObject);            // submit fog in immediate mode        
  339.  
  340.     Q3Object_Submit(gBaseGroup,viewInfo->viewObject);            // submit the geometry
  341. }
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.